.TH std::filesystem::perm_options 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::filesystem::perm_options \- std::filesystem::perm_options

.SH Synopsis
   Defined in header <filesystem>
   enum class perm_options {

       replace = /* unspecified */,
       add = /* unspecified */,      \fI(since C++17)\fP
       remove = /* unspecified */,
       nofollow = /* unspecified */

   };

   This type represents available options that control the behavior of the function
   std::filesystem::permissions().

   perm_options satisfies the requirements of BitmaskType (which means the bitwise
   operators operator&, operator|, operator^, operator~, operator&=, operator|=, and
   operator^= are defined for this type).

.SH Member constants

   At most one of add, remove, replace may be present, otherwise the behavior of the
   permissions function is undefined.

   Member constant                               Meaning
   replace         Permissions will be completely replaced by the argument to
                   permissions() (default behavior)
   add             Permissions will be replaced by the bitwise OR of the argument and
                   the current permissions
   remove          Permissions will be replaced by the bitwise AND of the negated
                   argument and current permissions
   nofollow        Permissions will be changed on the symlink itself, rather than on
                   the file it resolves to

.SH Example


// Run this code

 #include <filesystem>
 #include <fstream>
 #include <iostream>

 void demo_perms(std::filesystem::perms p)
 {
     using std::filesystem::perms;
     auto show = [=](char op, perms perm)
     {
         std::cout << (perms::none == (perm & p) ? '-' : op);
     };
     show('r', perms::owner_read);
     show('w', perms::owner_write);
     show('x', perms::owner_exec);
     show('r', perms::group_read);
     show('w', perms::group_write);
     show('x', perms::group_exec);
     show('r', perms::others_read);
     show('w', perms::others_write);
     show('x', perms::others_exec);
     std::cout << '\\n';
 }

 int main()
 {
     std::ofstream("test.txt"); // create file

     std::cout << "Created file with permissions: ";
     demo_perms(std::filesystem::status("test.txt").permissions());

     std::filesystem::permissions(
         "test.txt",
         std::filesystem::perms::owner_all | std::filesystem::perms::group_all,
         std::filesystem::perm_options::add
     );

     std::cout << "After adding u+rwx and g+rwx:  ";
     demo_perms(std::filesystem::status("test.txt").permissions());

     std::filesystem::remove("test.txt");
 }

.SH Possible output:

 Created file with permissions: rw-r--r--
 After adding u+rwx and g+wrx:  rwxrwxr--

.SH See also

   permissions modifies file access permissions
   \fI(C++17)\fP     \fI(function)\fP
   perms       identifies file system permissions
   \fI(C++17)\fP     \fI(enum)\fP
